package com.lizba.redis.limit.tokenbucket;

import io.lettuce.core.dynamic.Commands;
import io.lettuce.core.dynamic.annotation.Command;

import java.util.List;

/**
 * <p>
 *      Redis命令接口定义
 * </p>
 *
 * @Author: Liziba
 * @Date: 2021/9/8 23:50
 */
public interface IRedisCommand extends Commands {


    /**
     * 定义限流方法
     *
     * @param key           限流key
     * @param maxBurst      最大的突发请求，桶容量等于maxBurst + 1
     * @param tokens        tokens 与 seconds 是组合参数，表示seconds秒内添加个tokens
     * @param seconds       tokens 与 seconds 是组合参数，表示seconds秒内添加个tokens
     * @param apply         当前申请的token数
     * @return
     */
    @Command("CL.THROTTLE ?0 ?1 ?2 ?3 ?4")
    List<Object> throttle(String key, long maxBurst, long tokens, long seconds, long apply);

}
